ποΈGitΠ―ΡΠ°ποΈ
Node / meshtastic / Meshtastic-Android / files / .specify / extensions / review / tests / pester / detect-changed-files.Tests.ps1
Displaying Raw β’ Download
.specify/extensions/review/tests/pester/detect-changed-files.Tests.ps1 b307ceb5c24b98fa5c8a49fdf95e56eeaa4187bb (b307ceb5) Text, 30.68 KB
Te6edf3BeforeAll Tb4b4b4{
Te6edf3$ScriptsDir Tb4b4b4= Tffa657Join-Path Te6edf3$PSScriptRoot Ta5d6ff"Ta5d6ff..\..\scripts\powershellTa5d6ff"
Te6edf3$Script Tb4b4b4= Tffa657Join-Path Te6edf3$ScriptsDir Ta5d6ff"Ta5d6ffdetect-changed-files.ps1Ta5d6ff"
Tff7b72function Tffa657New-TempDir Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657Join-Path Tb4b4b4(Tff7b72[System.IO.Path]Tb4b4b4:Tb4b4b4:Te6edf3GetTempPathTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4(Tff7b72[System.IO.Path]Tb4b4b4:Tb4b4b4:Te6edf3GetRandomFileNameTb4b4b4(Tb4b4b4)Tb4b4b4)
Tffa657New-Item Te6edf3-ItemType Te6edf3Directory Te6edf3-Path Te6edf3$tmp Te6edf3-Force Tb4b4b4| Tffa657Out-Null
Tff7b72return Te6edf3$tmp
Tb4b4b4}
Tff7b72function Tffa657Initialize-GitRepo Tb4b4b4{
Tff7b72paramTb4b4b4(Tff7b72[string]Te6edf3$DirTb4b4b4)
Tffa657Push-Location Te6edf3$Dir
Te6edf3git Te6edf3init Tb4b4b4-Te6edf3-quiet Te6edf3-b Te6edf3main
Te6edf3git Te6edf3config Te6edf3userTb4b4b4.Te6edf3email Ta5d6ff"Ta5d6fftest@example.comTa5d6ff"
Te6edf3git Te6edf3config Te6edf3userTb4b4b4.Te6edf3name Ta5d6ff"Ta5d6ffTestTa5d6ff"
Tffa657New-Item Te6edf3-ItemType Te6edf3File Te6edf3-Path Ta5d6ff"Ta5d6ff.gitkeepTa5d6ff" Te6edf3-Force Tb4b4b4| Tffa657Out-Null
Te6edf3git Te6edf3add Tb4b4b4.
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffInitial commitTa5d6ff"
Tffa657Pop-Location
Tb4b4b4}
Tff7b72function Tffa657Initialize-GitRepoWithRemote Tb4b4b4{
Tff7b72paramTb4b4b4(Tff7b72[string]Te6edf3$DirTb4b4b4)
Te6edf3$bareDir Tb4b4b4= Tffa657Join-Path Te6edf3$Dir Ta5d6ff"Ta5d6ff_bare_remoteTa5d6ff"
Tffa657New-Item Te6edf3-ItemType Te6edf3Directory Te6edf3-Path Te6edf3$bareDir Te6edf3-Force Tb4b4b4| Tffa657Out-Null
Tffa657Push-Location Te6edf3$bareDir
Te6edf3git Te6edf3init Tb4b4b4-Te6edf3-bare Tb4b4b4-Te6edf3-quiet
Te6edf3git Te6edf3symbolicTe6edf3-ref Te6edf3HEAD Te6edf3refsTb4b4b4/Te6edf3headsTb4b4b4/Te6edf3main
Tffa657Pop-Location
Tffa657Push-Location Te6edf3$Dir
Te6edf3git Te6edf3init Tb4b4b4-Te6edf3-quiet Te6edf3-b Te6edf3main
Te6edf3git Te6edf3config Te6edf3userTb4b4b4.Te6edf3email Ta5d6ff"Ta5d6fftest@example.comTa5d6ff"
Te6edf3git Te6edf3config Te6edf3userTb4b4b4.Te6edf3name Ta5d6ff"Ta5d6ffTestTa5d6ff"
Te6edf3git Te6edf3remote Te6edf3add Te6edf3origin Te6edf3$bareDir
Tffa657New-Item Te6edf3-ItemType Te6edf3File Te6edf3-Path Ta5d6ff"Ta5d6ff.gitkeepTa5d6ff" Te6edf3-Force Tb4b4b4| Tffa657Out-Null
Te6edf3git Te6edf3add Tb4b4b4.
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffInitial commitTa5d6ff"
Te6edf3git Te6edf3push Tb4b4b4-Te6edf3-quiet Te6edf3origin Te6edf3main
Te6edf3git Te6edf3remote Tffa657set-head Te6edf3origin Tb4b4b4-Te6edf3-auto Te6edf32Tb4b4b4>Te6edf3$null
Tffa657Pop-Location
Tb4b4b4}
Tb4b4b4}
Te6edf3Describe Ta5d6ff"Ta5d6ffdetect-changed-files.ps1Ta5d6ff" Tb4b4b4{
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Help
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffHelpTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffshows usage with -HelpTa5d6ff" Tb4b4b4{
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Help
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Tb4b4b4(Te6edf3$result Te6edf3-join Ta5d6ff"Tffea00`nTa5d6ff"Tb4b4b4) Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffUsageTa5d6ff"
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffshows usage with -hTa5d6ff" Tb4b4b4{
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-h
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Tb4b4b4(Te6edf3$result Te6edf3-join Ta5d6ff"Tffea00`nTa5d6ff"Tb4b4b4) Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffUsageTa5d6ff"
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Git Availability Errors
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffGit availabilityTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6fffails when not in a git repositoryTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Push-Location Te6edf3$tmp
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf31
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6fffails with JSON error when not in a git repositoryTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Push-Location Te6edf3$tmp
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf31
Tb4b4b4(Te6edf3$result Te6edf3-join Ta5d6ff"Tffea00`nTa5d6ff"Tb4b4b4) Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff'"error"'
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# No Changes Detected
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffNo changesTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffexit code 2 when no changes in clean repoTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf32
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffexit code 2 with JSON output when no changesTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf32
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3message Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffNo changes detectedTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Mode B β Unstaged Changes
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffMode B - UnstagedTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffdetects unstaged changesTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6ffinitialTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fftracked.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3trackedTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd tracked fileTa5d6ff"
Ta5d6ff"Ta5d6ffmodifiedTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fftracked.txtTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3mode Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffWorking directory changesTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6fftracked.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Mode B β Staged Changes
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffMode B - StagedTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffdetects staged changesTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6ffnew fileTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffstaged.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3stagedTb4b4b4.Te6edf3txt
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3mode Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffWorking directory changesTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffstaged.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Mode B β Deduplication
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffMode B - DeduplicationTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffdeduplicates staged and unstaged changesTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6ffv1Ta5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffboth.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3bothTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd both.txtTa5d6ff"
Ta5d6ff"Ta5d6ffv2Ta5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffboth.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3bothTb4b4b4.Te6edf3txt
Ta5d6ff"Ta5d6ffv3Ta5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffboth.txtTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Tb4b4b4(Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Tffa657Where-Object Tb4b4b4{ Te6edf3$_ Tff7b72-eq Ta5d6ff"Ta5d6ffboth.txtTa5d6ff" Tb4b4b4}Tb4b4b4)Tb4b4b4.Te6edf3Count Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf31
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Mode A β Feature Branch Diff
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffMode A - Feature BranchTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffdetects feature branch changes via merge-baseTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepoWithRemote Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Te6edf3git Te6edf3checkout Tb4b4b4-Te6edf3-quiet Te6edf3-b Te6edf3featureTe6edf3-branch
Ta5d6ff"Ta5d6fffeature codeTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fffeature.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3featureTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd feature fileTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3branch Tb4b4b4| Te6edf3Should Te6edf3-Be Ta5d6ff"Ta5d6fffeature-branchTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3mode Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffFeature branch diffTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6fffeature.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffexcludes deleted files (diff-filter=ACMR)Ta5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepoWithRemote Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6ffto deleteTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffdelete-me.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3deleteTe6edf3-meTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd file to deleteTa5d6ff"
Te6edf3git Te6edf3push Tb4b4b4-Te6edf3-quiet Te6edf3origin Te6edf3main
Te6edf3git Te6edf3checkout Tb4b4b4-Te6edf3-quiet Te6edf3-b Te6edf3featureTe6edf3-delete
Te6edf3git Tffa657rm Tb4b4b4-Te6edf3-quiet Te6edf3deleteTe6edf3-meTb4b4b4.Te6edf3txt
Ta5d6ff"Ta5d6ffkeep meTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffkeep.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3keepTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffDelete and addTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffkeep.txtTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Tff7b72-Not Te6edf3-Contain Ta5d6ff"Ta5d6ffdelete-me.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffdetects multiple changed filesTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepoWithRemote Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Te6edf3git Te6edf3checkout Tb4b4b4-Te6edf3-quiet Te6edf3-b Te6edf3multiTe6edf3-files
Ta5d6ff"Ta5d6ffaTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fffile-a.txtTa5d6ff"
Ta5d6ff"Ta5d6ffbTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fffile-b.txtTa5d6ff"
Te6edf3$subDir Tb4b4b4= Tffa657Join-Path Te6edf3$tmp Ta5d6ff"Ta5d6ffsubTa5d6ff"
Tffa657New-Item Te6edf3-ItemType Te6edf3Directory Te6edf3-Path Te6edf3$subDir Te6edf3-Force Tb4b4b4| Tffa657Out-Null
Ta5d6ff"Ta5d6ffcTa5d6ff" Tb4b4b4| Tffa657Set-Content Tb4b4b4(Tffa657Join-Path Te6edf3$subDir Ta5d6ff"Ta5d6fffile-c.txtTa5d6ff"Tb4b4b4)
Te6edf3git Te6edf3add Tb4b4b4.
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd multiple filesTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6fffile-a.txtTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6fffile-b.txtTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffsub/file-c.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffdetects renamed files (diff-filter includes R)Ta5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepoWithRemote Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6ffcontentTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fforiginal.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3originalTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd originalTa5d6ff"
Te6edf3git Te6edf3push Tb4b4b4-Te6edf3-quiet Te6edf3origin Te6edf3main
Te6edf3git Te6edf3checkout Tb4b4b4-Te6edf3-quiet Te6edf3-b Te6edf3featureTe6edf3-rename
Te6edf3git Tffa657mv Te6edf3originalTb4b4b4.Te6edf3txt Te6edf3renamedTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffRename fileTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffrenamed.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Mode A β Feature Branch + Uncommitted Changes
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffMode A - Uncommitted changesTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffincludes staged uncommitted filesTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepoWithRemote Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Te6edf3git Te6edf3checkout Tb4b4b4-Te6edf3-quiet Te6edf3-b Te6edf3featureTe6edf3-staged
Ta5d6ff"Ta5d6ffcommittedTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffcommitted.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3committedTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd committed fileTa5d6ff"
T8b949e# Stage a new file without committing
Ta5d6ff"Ta5d6ffstagedTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffstaged-only.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3stagedTe6edf3-onlyTb4b4b4.Te6edf3txt
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffcommitted.txtTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffstaged-only.txtTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3mode Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffuncommittedTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffincludes unstaged uncommitted filesTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepoWithRemote Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6fforiginalTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffexisting.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3existingTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd existing fileTa5d6ff"
Te6edf3git Te6edf3push Tb4b4b4-Te6edf3-quiet Te6edf3origin Te6edf3main
Te6edf3git Te6edf3checkout Tb4b4b4-Te6edf3-quiet Te6edf3-b Te6edf3featureTe6edf3-unstaged
Ta5d6ff"Ta5d6ffcommitted on branchTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffcommitted.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3committedTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd committed fileTa5d6ff"
T8b949e# Modify existing file without staging
Ta5d6ff"Ta5d6ffmodifiedTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffexisting.txtTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffcommitted.txtTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffexisting.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffdeduplicates committed and uncommitted filesTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepoWithRemote Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Te6edf3git Te6edf3checkout Tb4b4b4-Te6edf3-quiet Te6edf3-b Te6edf3featureTe6edf3-dedup
Ta5d6ff"Ta5d6ffv1Ta5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffshared.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3sharedTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd shared fileTa5d6ff"
T8b949e# Modify the same file (unstaged)
Ta5d6ff"Ta5d6ffv2Ta5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffshared.txtTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Tb4b4b4(Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Tffa657Where-Object Tb4b4b4{ Te6edf3$_ Tff7b72-eq Ta5d6ff"Ta5d6ffshared.txtTa5d6ff" Tb4b4b4}Tb4b4b4)Tb4b4b4.Te6edf3Count Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf31
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Default Branch Detection Fallbacks
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffDefault branch detectionTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffdetects origin/main as default branchTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepoWithRemote Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
T8b949e# Unset symbolic-ref to force fallback
Te6edf3git Te6edf3remote Tffa657set-head Te6edf3origin Tb4b4b4-Te6edf3-delete Te6edf32Tb4b4b4>Te6edf3$null
Te6edf3git Te6edf3checkout Tb4b4b4-Te6edf3-quiet Te6edf3-b Tffa657test-branch
Ta5d6ff"Ta5d6fftestTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fftest-file.txtTa5d6ff"
Te6edf3git Te6edf3add Tffa657test-fileTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd test fileTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3default_branch Tb4b4b4| Te6edf3Should Te6edf3-Be Ta5d6ff"Ta5d6ffmainTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6fffalls back to Mode B when no remote default branch foundTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6ffchangeTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffnew-file.txtTa5d6ff"
Te6edf3git Te6edf3add Tffa657new-fileTb4b4b4.Te6edf3txt
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3mode Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffWorking directory changesTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffdetects origin/master as default branch when no origin/mainTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
T8b949e# Create a bare repo with master as default
Te6edf3$bareDir Tb4b4b4= Tffa657Join-Path Te6edf3$tmp Ta5d6ff"Ta5d6ff_bare_masterTa5d6ff"
Tffa657New-Item Te6edf3-ItemType Te6edf3Directory Te6edf3-Path Te6edf3$bareDir Te6edf3-Force Tb4b4b4| Tffa657Out-Null
Tffa657Push-Location Te6edf3$bareDir
Te6edf3git Te6edf3init Tb4b4b4-Te6edf3-bare Tb4b4b4-Te6edf3-quiet
Te6edf3git Te6edf3symbolicTe6edf3-ref Te6edf3HEAD Te6edf3refsTb4b4b4/Te6edf3headsTb4b4b4/Te6edf3master
Tffa657Pop-Location
Tffa657Push-Location Te6edf3$tmp
Te6edf3git Te6edf3init Tb4b4b4-Te6edf3-quiet
Te6edf3git Te6edf3config Te6edf3userTb4b4b4.Te6edf3email Ta5d6ff"Ta5d6fftest@example.comTa5d6ff"
Te6edf3git Te6edf3config Te6edf3userTb4b4b4.Te6edf3name Ta5d6ff"Ta5d6ffTestTa5d6ff"
Te6edf3git Te6edf3remote Te6edf3add Te6edf3origin Te6edf3$bareDir
Tffa657New-Item Te6edf3-ItemType Te6edf3File Te6edf3-Path Ta5d6ff"Ta5d6ff.gitkeepTa5d6ff" Te6edf3-Force Tb4b4b4| Tffa657Out-Null
Te6edf3git Te6edf3add Tb4b4b4.
Te6edf3git Te6edf3checkout Te6edf3-b Te6edf3master Tb4b4b4-Te6edf3-quiet Te6edf32Tb4b4b4>Te6edf3$null
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffInitial commitTa5d6ff"
Te6edf3git Te6edf3push Tb4b4b4-Te6edf3-quiet Te6edf3origin Te6edf3master Te6edf32Tb4b4b4>Te6edf3$null
T8b949e# Remove symbolic-ref to force fallback
Te6edf3git Te6edf3remote Tffa657set-head Te6edf3origin Tb4b4b4-Te6edf3-delete Te6edf32Tb4b4b4>Te6edf3$null
T8b949e# Create feature branch
Te6edf3git Te6edf3checkout Tb4b4b4-Te6edf3-quiet Te6edf3-b Tffa657test-branch
Ta5d6ff"Ta5d6fftestTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fftest-file.txtTa5d6ff"
Te6edf3git Te6edf3add Tffa657test-fileTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd test fileTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3default_branch Tb4b4b4| Te6edf3Should Te6edf3-Be Ta5d6ff"Ta5d6ffmasterTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# JSON Output Validation
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffJSON outputTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffhas all required keysTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6ffcontentTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffnew.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3newTb4b4b4.Te6edf3txt
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3PSObjectTb4b4b4.Te6edf3PropertiesTb4b4b4.Te6edf3Name Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffbranchTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3PSObjectTb4b4b4.Te6edf3PropertiesTb4b4b4.Te6edf3Name Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffdefault_branchTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3PSObjectTb4b4b4.Te6edf3PropertiesTb4b4b4.Te6edf3Name Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffmodeTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3PSObjectTb4b4b4.Te6edf3PropertiesTb4b4b4.Te6edf3Name Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffchanged_filesTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Edge Cases
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffEdge casesTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffhandles files with spaces in namesTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6ffcontentTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fffile with spaces.txtTa5d6ff"
Te6edf3git Te6edf3add Ta5d6ff"Ta5d6fffile with spaces.txtTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Tb4b4b4(Te6edf3$result Te6edf3-join Ta5d6ff"Tffea00`nTa5d6ff"Tb4b4b4) Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6fffile with spaces.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffhandles nested directory changesTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Te6edf3$nested Tb4b4b4= Tffa657Join-Path Te6edf3$tmp Ta5d6ff"Ta5d6ffdeepTa5d6ff" Ta5d6ff"Ta5d6ffnestedTa5d6ff" Ta5d6ff"Ta5d6ffpathTa5d6ff"
Tffa657New-Item Te6edf3-ItemType Te6edf3Directory Te6edf3-Path Te6edf3$nested Te6edf3-Force Tb4b4b4| Tffa657Out-Null
Ta5d6ff"Ta5d6ffdeepTa5d6ff" Tb4b4b4| Tffa657Set-Content Tb4b4b4(Tffa657Join-Path Te6edf3$nested Ta5d6ff"Ta5d6fffile.txtTa5d6ff"Tb4b4b4)
Te6edf3git Te6edf3add Tb4b4b4.
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffdeep/nested/path/file.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffonly reports ACMR filesTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6ffkeepTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffkeep.txtTa5d6ff"
Ta5d6ff"Ta5d6ffremoveTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffremove.txtTa5d6ff"
Te6edf3git Te6edf3add Tb4b4b4.
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd filesTa5d6ff"
Te6edf3git Tffa657rm Tb4b4b4-Te6edf3-quiet Te6edf3removeTb4b4b4.Te6edf3txt
Ta5d6ff"Ta5d6ffmodifiedTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffkeep.txtTa5d6ff"
Ta5d6ff"Ta5d6ffaddedTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffadded.txtTa5d6ff"
Te6edf3git Te6edf3add Tb4b4b4.
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffkeep.txtTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6ffadded.txtTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Tff7b72-Not Te6edf3-Contain Ta5d6ff"Ta5d6ffremove.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Detached HEAD
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffDetached HEADTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6fffalls back to Mode B on detached HEADTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6fffileTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffdetached.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3detachedTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffAdd fileTa5d6ff"
Te6edf3$commitHash Tb4b4b4= Te6edf3git Te6edf3revTe6edf3-parse Te6edf3HEAD
Te6edf3git Te6edf3checkout Tb4b4b4-Te6edf3-quiet Te6edf3$commitHash
Ta5d6ff"Ta5d6ffmodifiedTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffdetached.txtTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Tb4b4b4(Te6edf3$result Te6edf3-join Ta5d6ff"Tffea00`nTa5d6ff"Tb4b4b4) Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffWorking directory changesTa5d6ff"
Tb4b4b4(Te6edf3$result Te6edf3-join Ta5d6ff"Tffea00`nTa5d6ff"Tb4b4b4) Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffdetached.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Text Output Format Validation
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffText output formatTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6fftext mode output has correct formatTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6ffcontentTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffformatted.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3formattedTb4b4b4.Te6edf3txt
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$text Tb4b4b4= Te6edf3$result Te6edf3-join Ta5d6ff"Tffea00`nTa5d6ff"
Te6edf3$text Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffBRANCH:Ta5d6ff"
Te6edf3$text Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffDEFAULT_BRANCH:Ta5d6ff"
Te6edf3$text Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffMODE:Ta5d6ff"
Te6edf3$text Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffCHANGED_FILES:Ta5d6ff"
Te6edf3$text Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff"Ta5d6ffformatted.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Branch Field Validation
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffBranch fieldTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffbranch field matches current branch name in Mode ATa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepoWithRemote Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Te6edf3git Te6edf3checkout Tb4b4b4-Te6edf3-quiet Te6edf3-b Te6edf3myTe6edf3-featureTb4b4b4-Te6edf3123
Ta5d6ff"Ta5d6ffxTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6ffx.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3xTb4b4b4.Te6edf3txt
Te6edf3git Te6edf3commit Tb4b4b4-Te6edf3-quiet Te6edf3-m Ta5d6ff"Ta5d6ffcommitTa5d6ff"
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3branch Tb4b4b4| Te6edf3Should Te6edf3-Be Ta5d6ff"Ta5d6ffmy-feature-123Ta5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffbranch field shows current branch on default branch (Mode B)Ta5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
Ta5d6ff"Ta5d6ffchangeTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fffile.txtTa5d6ff"
Te6edf3git Te6edf3add Te6edf3fileTb4b4b4.Te6edf3txt
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3branch Tb4b4b4| Te6edf3Should Te6edf3-Be Ta5d6ff"Ta5d6ffmainTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
T8b949e# Special Characters in Filenames
T8b949e# ββββββββββββββββββββββββββββββββββββββββββββββ
Te6edf3Describe Ta5d6ff"Ta5d6ffSpecial character filenamesTa5d6ff" Tb4b4b4{
Te6edf3It Ta5d6ff"Ta5d6ffhandles filenames with special characters in JSON modeTa5d6ff" Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
T8b949e# Create files with special characters
Ta5d6ff"Ta5d6ffaTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fffile (1).txtTa5d6ff"
Ta5d6ff"Ta5d6ffbTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fffile's.txtTa5d6ff"
Ta5d6ff"Ta5d6ffcTa5d6ff" Tb4b4b4| Tffa657Set-Content Ta5d6ff"Ta5d6fffile&more.txtTa5d6ff"
Te6edf3git Te6edf3add Tb4b4b4.
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6fffile (1).txtTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6fffile's.txtTa5d6ff"
Te6edf3$jsonTb4b4b4.Te6edf3changed_files Tb4b4b4| Te6edf3Should Te6edf3-Contain Ta5d6ff"Ta5d6fffile&more.txtTa5d6ff"
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Te6edf3It Ta5d6ff"Ta5d6ffhandles filenames with double quotes in JSON modeTa5d6ff" Te6edf3-SkipTb4b4b4:Tb4b4b4(Te6edf3$IsWindows Tff7b72-or Te6edf3$env:OS Tff7b72-eq Ta5d6ff'Windows_NT'Tb4b4b4) Tb4b4b4{
Te6edf3$tmp Tb4b4b4= Tffa657New-TempDir
Tff7b72try Tb4b4b4{
Tffa657Initialize-GitRepo Te6edf3-Dir Te6edf3$tmp
Tffa657Push-Location Te6edf3$tmp
T8b949e# Create a file with a double quote in its name
T8b949e# (skipped on Windows β NTFS does not allow " in filenames)
Te6edf3$fname Tb4b4b4= Ta5d6ff'file"quote.txt'
Tff7b72[System.IO.File]Tb4b4b4:Tb4b4b4:Te6edf3WriteAllTextTb4b4b4(Tb4b4b4(Tffa657Join-Path Te6edf3$tmp Te6edf3$fnameTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4)
Te6edf3git Te6edf3add Tb4b4b4.
Te6edf3$result Tb4b4b4= Tb4b4b4& Te6edf3pwsh Te6edf3-NoProfile Tff7b72-File Te6edf3$Script Te6edf3-Json Te6edf32Tb4b4b4>Tb4b4b4&Te6edf31
Te6edf3$LASTEXITCODE Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf30
Te6edf3$json Tb4b4b4= Te6edf3$result Tb4b4b4| Tffa657ConvertFrom-Json
Te6edf3$jsonTb4b4b4.Te6edf3changed_filesTb4b4b4.Te6edf3Count Tb4b4b4| Te6edf3Should Te6edf3-Be Te6edf31
Te6edf3$jsonTb4b4b4.Te6edf3changed_filesTb4b4b4[Te6edf30Tb4b4b4] Tb4b4b4| Te6edf3Should Tff7b72-Match Ta5d6ff'quote'
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tffa657Pop-Location
Tffa657Remove-Item Te6edf3-Recurse Te6edf3-Force Te6edf3$tmp Te6edf3-ErrorAction Te6edf3SilentlyContinue
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.4 - Generated in 0.32s